Шаг 5 - Связь сокета с портом

Загрузить проект
Опять создаем тот же проект, что и в предыдущих шагах.

Я снова вынес пройденный код в процедуры. Только переменную SOCKET я сделал глобальной, так как она в последствии будет использоваться во многих командах. То что должно находиться в этих процедурах понятно из прошлых шагов.

..........
void CreateSocket();
void CloseScoket();

SOCKET servsocket;
.........
После создания сокета его нужно связать с портом. Для этого существует функция bind. Но нам нужен номер порта для связи, я его объявил так:
#define PORT_ADDR 80
Мы пытаемся реализовать сервер работающий по протоколу HTTP, а для этого протокола используется порт 80. Вы можете, если конечно знаете, использовать другие порты.

Для организации связи нам необходимо создать структуру SOCKADDR_IN она необходима для выполнения команды bind и в ней содержатся параметры связи, такие как порт и атрибуты. Вот её описание.

struct sockaddr_in{ 
	   short            	sin_family;
	   unsigned short   	sin_port;
	   struct   in_addr     sin_addr;
	   char               	sin_zero[8];};
В данной структуре есть вложенная структура sin_addr она описана вот так.
struct   in_addr {  
  union   {  
       struct{
             unsigned  char   s_b1, 
                              s_b2,
                              s_b3,
                              s_b4;
        }  S_un_b;  
     struct  {             unsigned  short  s_w1,
                             		    s_w2; 
             }  S_un_w;
               unsigned long  S_addr;    
      } S_un;
};
После описания структур и заполения данными можно вызывать bind
	SOCKADDR_IN socketaddr;
	socketaddr.sin_family = AF_INET;
	socketaddr.sin_addr.s_addr  = INADDR_ANY; 
	socketaddr.sin_port = PORT_ADDR;

	if (bind(servsocket,(LPSOCKADDR)&socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)
	{
		printf("Error bind socket");
		exit(1);
	}
	else printf("God bind socket !!!!!!\n");
Вот её описание
int bind ( 
  SOCKET s,                          
  const struct sockaddr FAR*  name,   
  int namelen                    
    );
Если всё нормально, то данная функция вернет 0 в противном случае SOCKET_ERROR
Hosted by uCoz